import * as Joi from 'joi';

export const configValidationSchema = Joi.object({
  // 应用配置
  NODE_ENV: Joi.string()
    .valid('development', 'production', 'test')
    .default('development'),
  PORT: Joi.number().port().default(3001),
  API_PREFIX: Joi.string().default('api/v1'),

  // 数据库配置
  DB_TYPE: Joi.string().valid('postgres').default('postgres'),
  DB_HOST: Joi.string().default('localhost'),
  DB_PORT: Joi.number().port().default(5432),
  DB_USERNAME: Joi.string().required(),
  DB_PASSWORD: Joi.string().required(),
  DB_DATABASE: Joi.string().required(),
  DB_SYNCHRONIZE: Joi.boolean().default(true),
  DB_LOGGING: Joi.boolean().default(false),

  // Redis配置
  REDIS_HOST: Joi.string().default('localhost'),
  REDIS_PORT: Joi.number().port().default(6379),
  REDIS_PASSWORD: Joi.string().optional(),
  REDIS_DB: Joi.number().min(0).max(15).default(0),

  // JWT配置
  JWT_SECRET: Joi.string().min(32).required(),
  JWT_EXPIRES_IN: Joi.string().default('24h'),

  // CORS配置
  CORS_ORIGIN: Joi.string().default('http://localhost:3000'),
  CORS_CREDENTIALS: Joi.boolean().default(true),

  // WebSocket配置
  WS_CORS_ORIGIN: Joi.string().default('http://localhost:3000'),
  WS_CORS_CREDENTIALS: Joi.boolean().default(true),

  // 房间配置
  ROOM_EXPIRY_MINUTES: Joi.number().min(1).max(1440).default(5),
  MAX_PARTICIPANTS_PER_ROOM: Joi.number().min(2).max(10).default(2),
  MAX_ROOMS_PER_IP: Joi.number().min(1).max(100).default(5),

  // 限流配置
  THROTTLE_TTL: Joi.number().min(1).default(60),
  THROTTLE_LIMIT: Joi.number().min(1).default(100),

  // 日志配置
  LOG_LEVEL: Joi.string()
    .valid('error', 'warn', 'info', 'debug', 'verbose')
    .default('debug'),
  LOG_FILE_ENABLED: Joi.boolean().default(false),
  LOG_FILE_PATH: Joi.string().default('logs'),

  // 安全配置
  HELMET_ENABLED: Joi.boolean().default(true),
  COMPRESSION_ENABLED: Joi.boolean().default(true),

  // 健康检查配置
  HEALTH_CHECK_ENABLED: Joi.boolean().default(true),
  HEALTH_CHECK_PATH: Joi.string().default('/health'),

  // 监控配置
  METRICS_ENABLED: Joi.boolean().default(false),
  METRICS_PATH: Joi.string().default('/metrics'),
});
